import 'package:flutter/material.dart';

void main() => runApp(SampleApp());

class SampleApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sample App',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SampleAppPage(),
    );
  }
}

class SampleAppPage extends StatefulWidget {
  SampleAppPage({Key key}) : super(key: key);

  @override
  _SampleAppPageState createState() => _SampleAppPageState();
}

class _SampleAppPageState extends State<SampleAppPage> {
  //todo:以下是在布局中添加或删除一个组件 在 Flutter 中，由于 Widget 是不可变的，所以没有 addChild() 的直接对应的方法。不过，你可以给返回一个 Widget 的父 Widget 传入一个方法，并通过布尔标记值控制子 Widget 的创建
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Sample App"),
      ),
      body: Center(
        child: _getToggleChild(),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _toggle,
        tooltip: 'Update Text',
        child: Icon(Icons.update),
      ),
    );
  }

  bool toggle = true;

  _toggle() {
    setState(() {
      toggle = !toggle;
    });
  }

  _getToggleChild() {
    if (toggle) {
      return Text("Toggle One");
    } else {
      return MaterialButton(
        onPressed: () {
          print("点击这个不知道的按钮");
        },
        child: Text("Toggle Two"),
      );
    }
  }

//todo:以下是测试文件变化State 无状态和有状态的 Widget 本质上是行为一致的。它们每一帧都会重建，不同之处在于 StatefulWidget 有一个跨帧存储和恢复状态数据的 State 对象
//  String textToShow = "I Like Flutter";
//
//  void _updateText() {
//    setState(() {
//      // update the text
//      textToShow = "Flutter is Awesome!";
//    });
//  }
//
//  @override
//  Widget build(BuildContext context) {
//    return Scaffold(
//      appBar: AppBar(
//        title: Text("Sample App"),
//      ),
//      body: Center(child: Text(textToShow)),
//      floatingActionButton: FloatingActionButton(
//        onPressed: _updateText,
//        tooltip: 'Update Text',
//        child: Icon(Icons.update),
//      ),
//    );
//  }
}
